package com.yfs.cloud.service;

import java.io.Serializable;
import java.util.List;

import com.github.pagehelper.PageInfo;
import com.yfs.cloud.commons.Like;
import com.yfs.cloud.commons.Sort;
import com.yfs.cloud.entity.BaseEntity;

/**
* @Company: 影法師工作室
* @Description: 抽象业务接口, 注意, 纯业务的, 所以 LoginService 不能继承  BaseService 
* @author 影法師  
* @date 2020年8月24日 下午4:14:56 
* @version V1.0
 */
public interface BaseService<T extends BaseEntity> {

	/**
	* @Description: 增 
	* @author 影法師 
	* @date 2020年8月25日 上午11:29:47 
	* @version V1.0 
	* @param @param t
	* @param @return
	* @param @throws Exception    
	* @return T    
	* @throws
	 */
	public T create(T t) throws Exception;

	/**
	* @Description: 根据主键物理删除 
	* @author 影法師 
	* @date 2020年8月19日 下午3:03:41 
	* @version V1.0 
	* @param @param id
	* @param @throws Exception    
	* @return void    
	* @throws
	 */
	public void remove(Serializable id) throws Exception;

	/**
	* @Description: 根据查询条件进行物理删除 
	* @author 影法師 
	* @date 2020年8月19日 下午3:04:18 
	* @version V1.0 
	* @param @param t
	* @param @throws Exception    
	* @return void    
	* @throws
	 */
	public void remove(T t) throws Exception;

	/**
	* @Description: 根据主键列表进行物理删除
	* @author 影法師 
	* @date 2020年8月19日 下午3:08:47 
	* @version V1.0 
	* @param @throws Exception    
	* @return void    
	* @throws
	 */
	public void remove(List<Serializable> ids) throws Exception;

	/**
	* @Description: 改(因为大部分实际业务场景下的删除都是逻辑删除, 所以大部分场景下的删其实就是改) 
	* @author 影法師 
	* @date 2020年8月25日 上午11:29:12 
	* @version V1.0 
	* @param @param t
	* @param @throws Exception    
	* @return void    
	* @throws
	 */
	public void modify(T t) throws Exception;

	/**
	* @Description: 查唯一 
	* @author 影法師 
	* @date 2020年8月25日 上午11:28:47 
	* @version V1.0 
	* @param @param t
	* @param @return
	* @param @throws Exception    
	* @return T    
	* @throws
	 */
	public T findOne(T t) throws Exception;

	/**
	* @Description: 查列表 
	* @author 影法師 
	* @date 2020年8月25日 上午11:28:54 
	* @version V1.0 
	* @param @param t
	* @param @param sort
	* @param @return
	* @param @throws Exception    
	* @return List<T>    
	* @throws
	 */
	public List<T> findList(T t, Sort[] sorts, Like[] likes) throws Exception;

	/**
	* @Description: 查分页 
	* @author 影法師 
	* @date 2020年8月25日 上午11:29:01 
	* @version V1.0 
	* @param @param t
	* @param @param pageNum
	* @param @param pageSize
	* @param @param sort
	* @param @return
	* @param @throws Exception    
	* @return PageInfo<T>    
	* @throws
	 */
	public PageInfo<T> findPage(T t, int pageNum, int pageSize, Sort[] sorts, Like[] likes) throws Exception;

}
